import hashlib
from datetime import datetime

import requests
from requests.exceptions import RequestException, Timeout, ConnectionError


def calculate_md5_hash(text):
    # 创建md5哈希对象
    md5_hash = hashlib.md5()
    # 更新哈希对象以添加要散列的数据。注意：必须提供bytes-like object，所以需要编码字符串
    md5_hash.update(text.encode('utf-8'))
    # 获取16字节的哈希值，并转换为32位的十六进制字符串
    hex_md5 = md5_hash.hexdigest()
    return hex_md5.upper()


def request_post(type, data, keyword, url_flag):
    # 定义要发送到服务器的URL
    if url_flag:
        url = f'http://meijieerp.hzjrtt.com:90/Ashx/Python_wxchat.ashx?Type={type}&keyword={keyword}'
    else:
        # url = f'http://localhost:89/Ashx/Python_wxchat.ashx?Type={type}&keyword={keyword}'
        url = f'http://192.168.1.6:89/Ashx/Python_wxchat.ashx?Type={type}&keyword={keyword}'
        # url = f'http://localhost:51244/Ashx/Python_wxchat.ashx?Type={type}&keyword={keyword}'

    # 获取当前日期时间 # 格式化日期时间为指定格式：yyyyMMddHH
    formatted_date = datetime.now().strftime('%Y%m%d')
    # 定义POST请求的数据
    # 假设这是你的Token
    str1 = f'your_token_here_python_@_{formatted_date}{keyword}'
    token = calculate_md5_hash(str1)
    print(token, str1)
    # 设置请求头，包含Token
    headers = {
        'Authorization': f'Basic {token}',
        'Content-Type': 'application/json'  # 如果发送JSON数据的话
    }
    try:
        # 发起POST请求，并将数据作为JSON发送，同时带上请求头
        response = requests.post(url, headers=headers, json=data, timeout=20)
        response.raise_for_status()  # 如果响应包含了一个HTTP错误状态码，则抛出HTTPError
        return response.json()
    except Timeout:
        return {'code': 0, 'msg': '出错了，【网络超时】', 'data': ''}
    except ConnectionError:
        return {'code': 0, 'msg': '出错了，【发生网络问题（DNS故障、拒绝连接等）】', 'data': ''}
    except RequestException as e:  # 捕获所有其他requests库的异常
        return {'code': 0, 'msg': f'出错了，请求异常【{e}】', 'data': ''}
